<?php 

require_once('Url.php');
require_once('Sessao.php');
require_once(ROOT . DS . 'lib' . DS . 'SessaoDB.php'); 

class Login {
	
	/**
	*	Nome dos campos utilizados no banco de dados para 
	*	realizar a consulta de verificação de acesso(login)
	*
	*	@access public
	*	@name $campos
	*	@var array
	*/
	public $campos = array(
		'login' => 'login',
		'senha' => 'senha'
	);
	
	/**
	*	Condição da consulta da verificação de acesso. Exemplo:
	*	Usuário com status = true, nível > 6 etc
	*
	*	@access public
	*	@name $condicao
	*	@var null|array
	*/
	public $condicao = array(
		'status' => true
	);
	
	/**
	*	Página em que o usuário será redirecionado para realizar
	*	o login 
	*
	*	@access public
	*	@name $redirecionarLogin
	*	@var string|array
	*/
	public $paginaLogin = array(
		'controller' => 'Usuarios',
		'action'	=> 'login'
	);
	
	/**
	*	Página em que o usuário será redirecionado após realizar
	*	o login com sucesso
	*
	*	@access public
	*	@name $redirecionarLogin
	*	@var string|array
	*/
	public $redirecionarLogin = array(
		'controller' => 'Usuarios',
		'action'	=> 'index'
	);
	
	/**
	*	Página em que o usuário será redirecionado após realizar
	*	o logout(sair do sistema).
	*
	*	@access public
	*	@name $redirecionarLogout
	*	@var string|array
	*/	
	public $redirecionarLogout = '';
	
	/**
	*	Redireciona o usuário para a página solicitada
	*
	*	@access public
	*	@name $redirecionarAutomaticamente
	*	@var boolean
	*/
	public $redirecionarAutomaticamente = true;
	
	/**
	* 	Modelo utilizado para fazer as operações de Login
	*
	* 	@access public
	* 	@name $model
	* 	@var string
	*/
	public $modelo = 'Usuario';
	
	
	function __construct() {
		/* inicializando o modelo que será usado para efetuar login */
		require_once(ROOT . DS . 'app' . DS . 'models' . DS . $this->modelo.'.php');
		$this->_modelo = new $this->modelo;
		/* fim inicialização */
		
		$this->Url = new Url;
		$this->Sessao = new Sessao;
		$this->SessaoDB = new SessaoDB;
		
	}
	
	public function verificaLogin() {
		// se NÃO existir sessão ativa
		if(!$this->Sessao->ler('Login')) {
			$paginaRequisitada = $this->Url->retornaUrl($this->Url->urlRequisitada);
			$paginaLogin = $this->Url->retornaUrl($this->paginaLogin);
			/* se a url requisitada NÃO for a mesma da página de login,
			redirecionamos o usuário ao login */
			if($paginaRequisitada != $paginaLogin) { 	
				$url = $this->Url->retornaUrl($this->paginaLogin);
				header('Location: '.$url);
			}
		}
	}
	
	public function logar($data) {
		$login = array(
			'where' => array(
				$this->campos['login'] => $data[$this->modelo][$this->campos['login']],
				$this->campos['senha'] => sha1($data[$this->modelo][$this->campos['senha']])
			)
		);
		
		if(!is_null($this->condicao)) $login['where'] = array_merge($login['where'], $this->condicao);

		if($login = $this->_modelo->buscar($login)) {
			// gravando os dados na sessão
			$this->Sessao->grava('Login',
				array(
					'id' => $login[$this->modelo][0]['id'],
					'nome' => $login[$this->modelo][0]['nome'],
					'login' => $login[$this->modelo][0]['login']
				)
			);

			// grava sessão no BD
			$sessaoDB['Sessao'] = array(
				'usuario_id' 	=> $login[$this->modelo][0]['id'],
				'inicio' 		=> date('Y-m-d H:i:s'),
				'fim' 			=> date('Y-m-d H:i:s', strtotime("+20 minutes")),
				'ip' 			=> getenv("REMOTE_ADDR")
			);
			
			$this->SessaoDB->escreve($sessaoDB);

			die;

			//unset($login);

			//header('Location: '. $this->Url->retornaUrl($this->redirecionarLogin));
		}
	}

	public function logout() {
		$this->Sessao->nova();
	}

}

?>
